package com.yxc.easyexceldemo.vo;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.alibaba.excel.read.listener.ModelBuildEventListener;
import com.yxc.easyexceldemo.annotations.EasyExcelEnumDataSource;
import com.yxc.easyexceldemo.const_enum.DepartmentDataEnum;
import com.yxc.easyexceldemo.const_enum.SexEnum;
import com.yxc.easyexceldemo.convert.EnumConvert;
import com.yxc.easyexceldemo.convert.EnumDataSourceConvert;
import com.yxc.easyexceldemo.convert.LocalDateConvert;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;

/**
 * 简单的excel实体类
 *
 * 使用easyExcel的时候，不可以使用<code>@Accessors(chain = true)</code>这个注解，
 * 因为添加之后，会将Data注解生成的set方法，会将返回值void变成类本身，导致反射获取set方法时获取失败
 * 在EasyExcel {@link ModelBuildEventListener} 方法当中，调用BeanMap时，set会失败，导致字段全部为null
 *
 * @author: YXC
 * @time: 2022/10/25 9:55
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
// @ContentRowHeight(10)  // 内容高度
// @HeadRowHeight(20)  // 表格头高度
// @ColumnWidth(25)  // 列宽度，可以设置在字段上
public class SimpleExcelVo {

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    private Integer age;

    @ExcelProperty(value = "生日", converter = LocalDateConvert.class)
    @DateTimeFormat("yyyy-MM-dd")
    private LocalDate birthday;

    /**
     * 使用Enum类型
     */
    @ExcelProperty(value = "性别", converter = EnumConvert.class)
    private SexEnum sex;

    @ExcelProperty("体重")
    private Double weight;

    @ExcelProperty("身高")
    @NumberFormat("0.00")
    private String height;

    /**
     * 自定义字段的，此处使用外部数据，可以从数据库读取，也可以从文件读取
     * 1: 宣传部  2: 体育部
     */
    @ExcelProperty(value = "部门", converter = EnumDataSourceConvert.class)
    @EasyExcelEnumDataSource(data = DepartmentDataEnum.class)
    private Integer department;


}
